package com.lingyu.jsjx.domain;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 教学规划
 * 对象 jsjx_course_plan
 *
 * @author ruoyi
 * @date 2025-07-31
 */
@TableName("jsjx_course_plan")
public class CoursePlan extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 规划id
     */
    @TableId(value = "plan_id", type = IdType.AUTO)
    private Long planId;

    /**
     * 课程名称
     */
    @Excel(name = "课程名称")
    @NotBlank(message = "课程名称不能为空")
    private String courseName;

    /**
     * 课程类型id
     */
    @Excel(name = "课程类型", readConverterExp = "43=专业核心课,44=实践课,45=证书对接课,46=校企定制课")
    @NotNull(message = "课程类型不正确")
    private Long courseTypeId;

    /**
     * 课程类型name
     */
    private String courseTypeName;

    /**
     * 所属专业群
     */
    @Excel(name = "所属专业群")
    @NotBlank(message = "所属专业群不能为空")
    private String majorGroup;

    /**
     * 所属学院id
     */
    @NotNull(message = "所属学院查找不到")
    private Long collageId;

    /**
     * 所属学院name
     */
    @Excel(name = "所属学院")
    private String collageName;

    /**
     * 所属专业id
     */
    @NotNull(message = "所属专业查找不到")
    private Long majorId;

    /**
     * 所属专业name
     */
    @Excel(name = "所属专业")
    private String majorName;

    /**
     * 所属班级id
     */
    @NotNull(message = "所属班级查找不到")
    private Long clazzId;

    /**
     * 所属班级name
     */
    @Excel(name = "所属班级")
    private String clazzName;


    /**
     * 职业岗位name
     */
    @Excel(name = "职业岗位")
    private String jobName;

    /**
     * 职业能力
     */
    @Excel(name = "职业能力")
    private String professionAbility;

    /**
     * 课时
     */
    @Excel(name = "课时")
    @NotNull(message = "课时不能为空")
    private Long courseHour;

    /**
     * 学分分布
     */
    @Excel(name = "学分分布")
    @NotBlank(message = "学分分布不能为空")
    private String creditHourDistribute;

    /**
     * 重点内容
     */
    @Excel(name = "重点内容")
    @NotBlank(message = "重点内容不能为空")
    private String emphasesContent;

    /**
     * 教学周次
     */
    @Excel(name = "教学周次")
    @NotBlank(message = "教学周次不能为空")
    private String teachWeek;

    /**
     * 课程状态id
     */
    @Excel(name = "课程状态", readConverterExp = "47=待开课,48=进行中,49=已完成")
    @NotNull(message = "课程状态不正确")
    private Long courseStatus;

    /**
     * 课程状态name
     */
    private String courseStatusName;

    /**
     * 学年学期
     */
    @Excel(name = "学年学期")
    @NotBlank(message = "学年学期不能为空")
    private String academicYear;

    /**
     * 考核方式
     */
    @Excel(name = "考核方式")
    @NotBlank(message = "考核方式不能为空")
    private String checkType;

    /**
     * 开课时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "开课时间", width = 30, dateFormat = "yyyy-MM-dd")
    @NotNull(message = "开课时间不能为空")
    private Date startDate;

    /**
     * 结课时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "结课时间", width = 30, dateFormat = "yyyy-MM-dd")
    @NotNull(message = "结课时间不能为空")
    private Date endDate;

    /**
     * 教案
     */
    private String fileId;

    /**
     * 文件信息
     */
    @TableField(exist = false)
    private List<FileInfo> fileInfo;

    public void setPlanId(Long planId) {
        this.planId = planId;
    }

    public Long getPlanId() {
        return planId;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseTypeId(Long courseTypeId) {
        this.courseTypeId = courseTypeId;
    }

    public Long getCourseTypeId() {
        return courseTypeId;
    }

    public void setCourseTypeName(String courseTypeName) {
        this.courseTypeName = courseTypeName;
    }

    public String getCourseTypeName() {
        return courseTypeName;
    }

    public void setMajorGroup(String majorGroup) {
        this.majorGroup = majorGroup;
    }

    public String getMajorGroup() {
        return majorGroup;
    }

    public void setCollageId(Long collageId) {
        this.collageId = collageId;
    }

    public Long getCollageId() {
        return collageId;
    }

    public void setCollageName(String collageName) {
        this.collageName = collageName;
    }

    public String getCollageName() {
        return collageName;
    }

    public void setMajorId(Long majorId) {
        this.majorId = majorId;
    }

    public Long getMajorId() {
        return majorId;
    }

    public void setMajorName(String majorName) {
        this.majorName = majorName;
    }

    public String getMajorName() {
        return majorName;
    }

    public void setClazzId(Long clazzId) {
        this.clazzId = clazzId;
    }

    public Long getClazzId() {
        return clazzId;
    }

    public void setClazzName(String clazzName) {
        this.clazzName = clazzName;
    }

    public String getClazzName() {
        return clazzName;
    }

    public void setJobName(String jobName) {
        this.jobName = jobName;
    }

    public String getJobName() {
        return jobName;
    }

    public void setProfessionAbility(String professionAbility) {
        this.professionAbility = professionAbility;
    }

    public String getProfessionAbility() {
        return professionAbility;
    }

    public void setCourseHour(Long courseHour) {
        this.courseHour = courseHour;
    }

    public Long getCourseHour() {
        return courseHour;
    }

    public void setCreditHourDistribute(String creditHourDistribute) {
        this.creditHourDistribute = creditHourDistribute;
    }

    public String getCreditHourDistribute() {
        return creditHourDistribute;
    }

    public void setEmphasesContent(String emphasesContent) {
        this.emphasesContent = emphasesContent;
    }

    public String getEmphasesContent() {
        return emphasesContent;
    }

    public void setTeachWeek(String teachWeek) {
        this.teachWeek = teachWeek;
    }

    public String getTeachWeek() {
        return teachWeek;
    }

    public void setCourseStatus(Long courseStatus) {
        this.courseStatus = courseStatus;
    }

    public Long getCourseStatus() {
        return courseStatus;
    }

    public void setCourseStatusName(String courseStatusName) {
        this.courseStatusName = courseStatusName;
    }

    public String getCourseStatusName() {
        return courseStatusName;
    }

    public void setAcademicYear(String academicYear) {
        this.academicYear = academicYear;
    }

    public String getAcademicYear() {
        return academicYear;
    }

    public void setCheckType(String checkType) {
        this.checkType = checkType;
    }

    public String getCheckType() {
        return checkType;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getStartDate() {
        return startDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setFileId(String fileId) {
        this.fileId = fileId;
    }

    public String getFileId() {
        return fileId;
    }


    public List<FileInfo> getFileInfo() {
        return fileInfo;
    }

    public void setFileInfo(List<FileInfo> fileInfo) {
        this.fileInfo = fileInfo;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("planId", getPlanId())
                .append("courseName", getCourseName())
                .append("courseTypeId", getCourseTypeId())
                .append("courseTypeName", getCourseTypeName())
                .append("majorGroup", getMajorGroup())
                .append("collageId", getCollageId())
                .append("collageName", getCollageName())
                .append("majorId", getMajorId())
                .append("majorName", getMajorName())
                .append("clazzId", getClazzId())
                .append("clazzName", getClazzName())
                .append("jobName", getJobName())
                .append("professionAbility", getProfessionAbility())
                .append("courseHour", getCourseHour())
                .append("creditHourDistribute", getCreditHourDistribute())
                .append("emphasesContent", getEmphasesContent())
                .append("teachWeek", getTeachWeek())
                .append("courseStatus", getCourseStatus())
                .append("courseStatusName", getCourseStatusName())
                .append("academicYear", getAcademicYear())
                .append("checkType", getCheckType())
                .append("startDate", getStartDate())
                .append("endDate", getEndDate())
                .append("fileId", getFileId())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .toString();
    }
}
